



<!DOCTYPE html>
<html>
<head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
 <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" >
 
 <meta name="ROBOTS" content="NOARCHIVE">
 
 <link rel="icon" type="image/vnd.microsoft.icon" href="https://ssl.gstatic.com/codesite/ph/images/phosting.ico">
 
 
 <script type="text/javascript">
 
 
 
 
 var codesite_token = "ABZ6GAcejLKk2txAc4VgfZDYU--bVFUaVw:1417533286226";
 
 
 var CS_env = {"loggedInUserEmail": "tavristasos@gmail.com", "token": "ABZ6GAcejLKk2txAc4VgfZDYU--bVFUaVw:1417533286226", "profileUrl": "/u/105438543774775363520/", "projectHomeUrl": "/p/tavristasos", "projectName": "tavristasos", "assetVersionPath": "https://ssl.gstatic.com/codesite/ph/1729405847801014513", "relativeBaseUrl": "", "assetHostPath": "https://ssl.gstatic.com/codesite/ph", "domainName": null};
 var _gaq = _gaq || [];
 _gaq.push(
 ['siteTracker._setAccount', 'UA-18071-1'],
 ['siteTracker._trackPageview']);
 
 (function() {
 var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
 ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
 (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(ga);
 })();
 
 </script>
 
 
 <title>spinners.js - 
 tavristasos -
 
 
 1 - Google Project Hosting
 </title>
 <link type="text/css" rel="stylesheet" href="https://ssl.gstatic.com/codesite/ph/1729405847801014513/css/core.css">
 
 <link type="text/css" rel="stylesheet" href="https://ssl.gstatic.com/codesite/ph/1729405847801014513/css/ph_detail.css" >
 
 
 <link type="text/css" rel="stylesheet" href="https://ssl.gstatic.com/codesite/ph/1729405847801014513/css/d_sb.css" >
 
 
 
<!--[if IE]>
 <link type="text/css" rel="stylesheet" href="https://ssl.gstatic.com/codesite/ph/1729405847801014513/css/d_ie.css" >
<![endif]-->
 <style type="text/css">
 .menuIcon.off { background: no-repeat url(https://ssl.gstatic.com/codesite/ph/images/dropdown_sprite.gif) 0 -42px }
 .menuIcon.on { background: no-repeat url(https://ssl.gstatic.com/codesite/ph/images/dropdown_sprite.gif) 0 -28px }
 .menuIcon.down { background: no-repeat url(https://ssl.gstatic.com/codesite/ph/images/dropdown_sprite.gif) 0 0; }
 
 
 
  tr.inline_comment {
 background: #fff;
 vertical-align: top;
 }
 div.draft, div.published {
 padding: .3em;
 border: 1px solid #999; 
 margin-bottom: .1em;
 font-family: arial, sans-serif;
 max-width: 60em;
 }
 div.draft {
 background: #ffa;
 } 
 div.published {
 background: #e5ecf9;
 }
 div.published .body, div.draft .body {
 padding: .5em .1em .1em .1em;
 max-width: 60em;
 white-space: pre-wrap;
 white-space: -moz-pre-wrap;
 white-space: -pre-wrap;
 white-space: -o-pre-wrap;
 word-wrap: break-word;
 font-size: 1em;
 }
 div.draft .actions {
 margin-left: 1em;
 font-size: 90%;
 }
 div.draft form {
 padding: .5em .5em .5em 0;
 }
 div.draft textarea, div.published textarea {
 width: 95%;
 height: 10em;
 font-family: arial, sans-serif;
 margin-bottom: .5em;
 }

 
 .nocursor, .nocursor td, .cursor_hidden, .cursor_hidden td {
 background-color: white;
 height: 2px;
 }
 .cursor, .cursor td {
 background-color: darkblue;
 height: 2px;
 display: '';
 }
 
 
.list {
 border: 1px solid white;
 border-bottom: 0;
}

 
 </style>
</head>
<body class="t4">
<script type="text/javascript">
 window.___gcfg = {lang: 'en'};
 (function() 
 {var po = document.createElement("script");
 po.type = "text/javascript"; po.async = true;po.src = "https://apis.google.com/js/plusone.js";
 var s = document.getElementsByTagName("script")[0];
 s.parentNode.insertBefore(po, s);
 })();
</script>
<div class="headbg">

 <div id="gaia">
 

 <span>
 
 
 
 <a href="#" id="multilogin-dropdown" onclick="return false;"
 ><u><b>tavristasos@gmail.com</b></u> <small>&#9660;</small></a>
 
 
 | <a href="/u/105438543774775363520/" id="projects-dropdown" onclick="return false;"
 ><u>My favorites</u> <small>&#9660;</small></a>
 | <a href="/u/105438543774775363520/" onclick="_CS_click('/gb/ph/profile');"
 title="Profile, Updates, and Settings"
 ><u>Profile</u></a>
 | <a href="https://www.google.com/accounts/Logout?continue=https%3A%2F%2Fcode.google.com%2Fp%2Ftavristasos%2Fsource%2Fbrowse%2Ftrunk%2Fspinners.js" 
 onclick="_CS_click('/gb/ph/signout');"
 ><u>Sign out</u></a>
 
 </span>

 </div>

 <div class="gbh" style="left: 0pt;"></div>
 <div class="gbh" style="right: 0pt;"></div>
 
 
 <div style="height: 1px"></div>
<!--[if lte IE 7]>
<div style="text-align:center;">
Your version of Internet Explorer is not supported. Try a browser that
contributes to open source, such as <a href="http://www.firefox.com">Firefox</a>,
<a href="http://www.google.com/chrome">Google Chrome</a>, or
<a href="http://code.google.com/chrome/chromeframe/">Google Chrome Frame</a>.
</div>
<![endif]-->



 <table style="padding:0px; margin: 0px 0px 10px 0px; width:100%" cellpadding="0" cellspacing="0"
 itemscope itemtype="http://schema.org/CreativeWork">
 <tr style="height: 58px;">
 
 
 
 <td id="plogo">
 <link itemprop="url" href="/p/tavristasos">
 <a href="/p/tavristasos/">
 
 <img src="https://ssl.gstatic.com/codesite/ph/images/defaultlogo.png" alt="Logo" itemprop="image">
 
 </a>
 </td>
 
 <td style="padding-left: 0.5em">
 
 <div id="pname">
 <a href="/p/tavristasos/"><span itemprop="name">tavristasos</span></a>
 </div>
 
 <div id="psum">
 <a id="project_summary_link"
 href="/p/tavristasos/"><span itemprop="description">1</span></a>
 
 </div>
 
 
 </td>
 <td style="white-space:nowrap;text-align:right; vertical-align:bottom;">
 
 <form action="/hosting/search">
 <input size="30" name="q" value="" type="text">
 
 <input type="submit" name="projectsearch" value="Search projects" >
 </form>
 
 </tr>
 </table>

</div>

 
<div id="mt" class="gtb"> 
 <a href="/p/tavristasos/" class="tab ">Project&nbsp;Home</a>
 
 
 
 
 <a href="/p/tavristasos/downloads/list" class="tab ">Downloads</a>
 
 
 
 
 
 <a href="/p/tavristasos/w/list" class="tab ">Wiki</a>
 
 
 
 
 
 <a href="/p/tavristasos/issues/list"
 class="tab ">Issues</a>
 
 
 
 
 
 <a href="/p/tavristasos/source/checkout"
 class="tab active">Source</a>
 
 
 
 
 
 <a href="/p/tavristasos/admin"
 class="tab inactive">Administer</a>
 
 
 
 <span style="font-weight: bold; color: #c00; margin-top: 5px; display: block;">
 Scheduled for deletion due to Violation of TOS.
 </span>
 
 
 <div class=gtbc></div>
</div>
<table cellspacing="0" cellpadding="0" width="100%" align="center" border="0" class="st">
 <tr>
 
 
 
 
 
 
 <td class="subt">
 <div class="st2">
 <div class="isf">
 
 


 <span class="inst1"><a href="/p/tavristasos/source/checkout">Checkout</a></span> &nbsp;
 <span class="inst2"><a href="/p/tavristasos/source/browse/">Browse</a></span> &nbsp;
 <span class="inst3"><a href="/p/tavristasos/source/list">Changes</a></span> &nbsp;
 
 
 
 
 
 <a href="/p/tavristasos/issues/entry?show=review&former=sourcelist">Request code review</a>
 
 
 
 </form>
 <script type="text/javascript">
 
 function codesearchQuery(form) {
 var query = document.getElementById('q').value;
 if (query) { form.action += '%20' + query; }
 }
 </script>
 </div>
</div>

 </td>
 
 
 
 <td align="right" valign="top" class="bevel-right"></td>
 </tr>
</table>


<script type="text/javascript">
 var cancelBubble = false;
 function _go(url) { document.location = url; }
</script>
<div id="maincol"
 
>

 




<div class="expand">
<div id="colcontrol">
<style type="text/css">
 #file_flipper { white-space: nowrap; padding-right: 2em; }
 #file_flipper.hidden { display: none; }
 #file_flipper .pagelink { color: #0000CC; text-decoration: underline; }
 #file_flipper #visiblefiles { padding-left: 0.5em; padding-right: 0.5em; }
</style>
<table id="nav_and_rev" class="list"
 cellpadding="0" cellspacing="0" width="100%">
 <tr>
 
 <td nowrap="nowrap" class="src_crumbs src_nav" width="33%">
 <strong class="src_nav">Source path:&nbsp;</strong>
 <span id="crumb_root">
 
 <a href="/p/tavristasos/source/browse/">svn</a>/&nbsp;</span>
 <span id="crumb_links" class="ifClosed"><a href="/p/tavristasos/source/browse/trunk/">trunk</a><span class="sp">/&nbsp;</span>spinners.js</span>
 
 


 </td>
 
 
 <td nowrap="nowrap" width="33%" align="center">
 <a href="/p/tavristasos/source/browse/trunk/spinners.js?edit=1"
 ><img src="https://ssl.gstatic.com/codesite/ph/images/pencil-y14.png"
 class="edit_icon">Edit file</a>
 </td>
 
 
 <td nowrap="nowrap" width="33%" align="right">
 <table cellpadding="0" cellspacing="0" style="font-size: 100%"><tr>
 
 
 <td class="flipper"><b>r200</b></td>
 
 </tr></table>
 </td> 
 </tr>
</table>

<div class="fc">
 
 
 
<style type="text/css">
.undermouse span {
 background-image: url(https://ssl.gstatic.com/codesite/ph/images/comments.gif); }
</style>
<table class="opened" id="review_comment_area"
><tr>
<td id="nums">
<pre><table width="100%"><tr class="nocursor"><td></td></tr></table></pre>
<pre><table width="100%" id="nums_table_0"><tr id="gr_svn200_1"

><td id="1"><a href="#1">1</a></td></tr
><tr id="gr_svn200_2"

><td id="2"><a href="#2">2</a></td></tr
><tr id="gr_svn200_3"

><td id="3"><a href="#3">3</a></td></tr
><tr id="gr_svn200_4"

><td id="4"><a href="#4">4</a></td></tr
><tr id="gr_svn200_5"

><td id="5"><a href="#5">5</a></td></tr
><tr id="gr_svn200_6"

><td id="6"><a href="#6">6</a></td></tr
><tr id="gr_svn200_7"

><td id="7"><a href="#7">7</a></td></tr
><tr id="gr_svn200_8"

><td id="8"><a href="#8">8</a></td></tr
><tr id="gr_svn200_9"

><td id="9"><a href="#9">9</a></td></tr
><tr id="gr_svn200_10"

><td id="10"><a href="#10">10</a></td></tr
><tr id="gr_svn200_11"

><td id="11"><a href="#11">11</a></td></tr
><tr id="gr_svn200_12"

><td id="12"><a href="#12">12</a></td></tr
></table></pre>
<pre><table width="100%"><tr class="nocursor"><td></td></tr></table></pre>
</td>
<td id="lines">
<pre><table width="100%"><tr class="cursor_stop cursor_hidden"><td></td></tr></table></pre>
<pre class="prettyprint lang-js"><table id="src_table_0"><tr
id=sl_svn200_1

><td class="source">/*  Spinners 2.0_b1<br></td></tr
><tr
id=sl_svn200_2

><td class="source"> *  (c) 2010-2011 Nick Stakenburg - http://www.nickstakenburg.com<br></td></tr
><tr
id=sl_svn200_3

><td class="source"> *<br></td></tr
><tr
id=sl_svn200_4

><td class="source"> *  Spinners is freely distributable under the terms of an MIT-style license.<br></td></tr
><tr
id=sl_svn200_5

><td class="source"> *<br></td></tr
><tr
id=sl_svn200_6

><td class="source"> *  Requires ExplorerCanvas to work in Internet Explorer:<br></td></tr
><tr
id=sl_svn200_7

><td class="source"> *  http://code.google.com/p/explorercanvas<br></td></tr
><tr
id=sl_svn200_8

><td class="source"> *<br></td></tr
><tr
id=sl_svn200_9

><td class="source"> *  GitHub: https://github.com/staaky/spinners<br></td></tr
><tr
id=sl_svn200_10

><td class="source"> */<br></td></tr
><tr
id=sl_svn200_11

><td class="source"><br></td></tr
><tr
id=sl_svn200_12

><td class="source">(function(){function c(a,b){a&amp;&amp;(this.element=a,i.remove(a),i.removeDetached(),this.options=f.extend({radii:[5,10],color:&quot;#000&quot;,dashWidth:1.8,dashes:12,opacity:1,padding:3,speed:.7,build:!0},b||{}),this._position=0,this._state=&quot;stopped&quot;,this.build(),i.add(this))}function b(a){this.element=a}function a(a){return a*Math.PI/180}var d={Version:&quot;2.0_b1&quot;},e=Array.prototype.slice,f={extend:function(a,b){for(var c in b)a[c]=b[c];return a},&quot;break&quot;:{},_each:function(a,b){for(var c=0,d=a.length;c&lt;d;c++)b(a[c])},each:function(a,b,c){var d=0;try{this._each(a,function(a){b.call(c,a,d++)})}catch(e){if(e!=f[&quot;break&quot;])throw e}},bind:function(a,b){var c=e.call(arguments,2);return function(){return a.apply(b,c.concat(e.call(arguments)))}},scroll:function(a,b){if(!b)return a;var c=a.slice(0,b);return a.slice(b,a.length).concat(c)},any:function(a,b,c){var d=!1;f.each(a||[],function(a,e){if(d|=b.call(c,a,e))return f[&quot;break&quot;]});return!!d},member:function(a,b){var c=!1;f.any(a||[],function(a){if(c=a===b)return!0});return c},select:function(a,b,c){var d=[];f.each(a||[],function(a,e){b.call(c,a,e)&amp;&amp;(d[d.length]=a)});return d},without:function(a){var b=e.call(arguments,1);return f.select(a,function(a){return!f.member(b,a)})}},g={drawRoundedRectangle:function(b,c){var d=f.extend({top:0,left:0,width:0,height:0,radius:0},c||{}),e=d.left,g=d.top,h=d.width,i=d.height,d=d.radius;b.beginPath(),b.moveTo(e+d,g),b.arc(e+h-d,g+d,d,a(-90),a(0),!1),b.arc(e+h-d,g+i-d,d,a(0),a(90),!1),b.arc(e+d,g+i-d,d,a(90),a(180),!1),b.arc(e+d,g+d,d,a(-180),a(-90),!1),b.closePath(),b.fill()}},h=function(){function a(a){var c=[];a.indexOf(&quot;#&quot;)==0&amp;&amp;(a=a.substring(1)),a=a.toLowerCase();if(a.replace(b,&quot;&quot;)!=&quot;&quot;)return null;a.length==3?(c[0]=a.charAt(0)+a.charAt(0),c[1]=a.charAt(1)+a.charAt(1),c[2]=a.charAt(2)+a.charAt(2)):(c[0]=a.substring(0,2),c[1]=a.substring(2,4),c[2]=a.substring(4));for(a=0;a&lt;c.length;a++)c[a]=parseInt(c[a],16);c.red=c[0],c.green=c[1],c.blue=c[2];return c}var b=RegExp(&quot;[0123456789abcdef]&quot;,&quot;g&quot;),c=function(){function a(a,b,c){a=a.toString(c||10);return Array(b-a.length).join(&quot;0&quot;)+a}return function(b,c,d){return&quot;#&quot;+a(b,2,16)+a(c,2,16)+a(d,2,16)}}();return{hex2rgb:a,hex2fill:function(b,c){typeof c==&quot;undefined&quot;&amp;&amp;(c=1);var d=c,e=a(b);e[3]=d,e.opacity=d;return&quot;rgba(&quot;+e.join()+&quot;)&quot;},rgb2hex:c}}();f.extend(d,{enabled:!1,support:{canvas:function(){var a=document.createElement(&quot;canvas&quot;);return!!a.getContext&amp;&amp;!!a.getContext(&quot;2d&quot;)}()},dom:function(){var a,b;a=b=function(){throw&quot;Using Spinners with a CSS Selector requires a selector engine, include one of: Sizzle (jQuery 1.4+/Prototype 1.7+), NWMatcher or Slick (MooTools 1.3+).&quot;},window.Sizzle?(a=Sizzle,b=Sizzle.matches):window.jQuery?(a=jQuery.find,b=function(a,b){return jQuery(a).is(b)}):window.NWMatcher&amp;&amp;NW.Dom?(a=NW.Dom.select,b=NW.Dom.match):window.Prototype&amp;&amp;Prototype.Selector?(a=Prototype.Selector.select,b=Prototype.Selector.match):window.Slick&amp;&amp;(a=function(a,b){return Slick.search(b||document,a)},b=Slick.match);return{select:a,match:b}}(),init:function(){if(!this.support.canvas&amp;&amp;!window.G_vmlCanvasManager)if(window.attachEvent&amp;&amp;navigator.userAgent.indexOf(&quot;Opera&quot;)===-1)alert(&quot;Spinners requires ExplorerCanvas (excanvas.js)&quot;);else return;window.G_vmlCanvasManager&amp;&amp;window.G_vmlCanvasManager.init_(document),this.enabled=!0},create:function(a,c){b.create(a,c);return this.get(a)},get:function(a){return new b(a)},play:function(a){this.get(a).play();return this},pause:function(a){this.get(a).pause();return this},toggle:function(a){this.get(a).toggle();return this},stop:function(a){this.get(a).stop();return this},remove:function(a){this.get(a).remove();return this},removeDetached:function(){i.removeDetached();return this},getDimensions:function(a){a=i.get(a)[0].getLayout().workspace.radius*2;return{width:a,height:a}}});var i={spinners:[],get:function(a){if(a){var b=[];f.each(this.spinners,function(c){c&amp;&amp;(a.nodeType==1?c.element==a:d.dom.match(c.element,a))&amp;&amp;b.push(c)});return b}},add:function(a){this.spinners.push(a)},remove:function(a){var b=[];f.each(this.spinners,function(c){(a.nodeType==1?c.element==a:d.dom.match(c.element,a))&amp;&amp;b.push(c.element)}),f.each(b,f.bind(function(a){this.removeByElement(a)},this))},removeByElement:function(a){if(a=this.get(a)[0])a.remove(),this.spinners=f.without(this.spinners,a)},removeDetached:function(){return function(){f.each(this.spinners,function(a){a&amp;&amp;!a.isAttached()&amp;&amp;this.remove(a.element)},this)}}()};f.extend(b,{create:function(a,b){if(a){var e=b||{},g=[];a.nodeType==1?g.push(new c(a,e)):f.each(d.dom.select(a)||[],function(a){g.push(new c(a,e))});return g}}}),f.extend(b.prototype,{items:function(){return i.get(this.element)},play:function(){f.each(this.items(),function(a){a.play()});return this},stop:function(){f.each(this.items(),function(a){a.stop()});return this},pause:function(){f.each(this.items(),function(a){a.pause()});return this},toggle:function(){f.each(this.items(),function(a){a.toggle()});return this},remove:function(){i.remove(this.element);return this}}),f.extend(c.prototype,function(){function b(){var a=this.options.speed*1e3/this.options.dashes;this.nextPosition(),this._playTimer=window.setTimeout(f.bind(b,this),a)}return{remove:function(){this.canvas&amp;&amp;(this.stop(),this.canvas.parentNode.removeChild(this.canvas),this.ctx=this.canvas=null)},build:function(){this.remove();var a=this.getLayout().workspace.radius,b=a*2;this.canvas=document.createElement(&quot;canvas&quot;),this.canvas.style.zoom=1,this.canvas.height=b,this.canvas.width=b,document.body.appendChild(this.canvas),window.G_vmlCanvasManager&amp;&amp;G_vmlCanvasManager.initElement(this.canvas),this.ctx=this.canvas.getContext(&quot;2d&quot;),this.ctx.globalAlpha=this.options.opacity,this.element.appendChild(this.canvas),this.ctx.translate(a,a),this.drawPosition(0);return this},getLayout:function(){if(this._layout)return this._layout;var a=this.options,b=a.dashes,c=a.radii,d=a.dashWidth,e=Math.min(c[0],c[1]),c=Math.max(c[0],c[1]),f=Math.ceil(Math.max(Math.max(d,c),Math.sqrt(c*c+d/2*(d/2))));f+=a.padding;for(var a=f,g=1/b,h=[],i=0;i&lt;b;i++)h.push((i+1)*g);return this._layout=b={workspace:{radius:a,opacities:h},dash:{position:{top:f-c,left:f-d/2},dimensions:{width:d,height:c-e}}}},isAttached:function(){if(!this.element)return!1;var a;for(a=this.element;a&amp;&amp;a.parentNode;)a=a.parentNode;return!!a&amp;&amp;!!a.body},_nextPosition:b,nextPosition:function(){this._position==this.options.dashes-1&amp;&amp;(this._position=-1),this._position++,this.drawPosition(this._position)},drawPosition:function(b){var c=this.getLayout().workspace,d=c.radius*2,e=-1*c.radius,g=this.options.dashes;this.ctx.clearRect(e,e,d,d),d=a(360/g),b=f.scroll(c.opacities,b*-1);for(c=0;c&lt;g;c++)this.drawDash(b[c],this.options.color),this.ctx.rotate(d)},drawDash:function(a,b){this.ctx.fillStyle=h.hex2fill(b,a);var c=this.getLayout(),d=c.workspace.radius,e=c.dash.position,c=c.dash.dimensions;g.drawRoundedRectangle(this.ctx,{top:e.top-d,left:e.left-d,width:c.width,height:c.height,radius:Math.min(c.height,c.width)/2})},play:function(){if(this._state!=&quot;playing&quot;){this._state=&quot;playing&quot;;var a=this.options.speed*1e3/this.options.dashes;this._playTimer=window.setTimeout(f.bind(b,this),a);return this}},pause:function(){if(this._state!=&quot;paused&quot;)return this._pause(),this._state=&quot;paused&quot;,this},_pause:function(){this._playTimer&amp;&amp;(window.clearTimeout(this._playTimer),this._playTimer=null)},stop:function(){if(this._state!=&quot;stopped&quot;)return this._pause(),this._position=0,this.drawPosition(0),this._state=&quot;stopped&quot;,this},toggle:function(){this[this._state==&quot;playing&quot;?&quot;pause&quot;:&quot;play&quot;]();return this}}}()),window.Spinners=d,d.init(),d.enabled||f.each(&quot;create get remove play stop pause toggle&quot;.split(&quot; &quot;),function(a){d[a]=function(){return this}})})();<br></td></tr
></table></pre>
<pre><table width="100%"><tr class="cursor_stop cursor_hidden"><td></td></tr></table></pre>
</td>
</tr></table>

 
<script type="text/javascript">
 var lineNumUnderMouse = -1;
 
 function gutterOver(num) {
 gutterOut();
 var newTR = document.getElementById('gr_svn200_' + num);
 if (newTR) {
 newTR.className = 'undermouse';
 }
 lineNumUnderMouse = num;
 }
 function gutterOut() {
 if (lineNumUnderMouse != -1) {
 var oldTR = document.getElementById(
 'gr_svn200_' + lineNumUnderMouse);
 if (oldTR) {
 oldTR.className = '';
 }
 lineNumUnderMouse = -1;
 }
 }
 var numsGenState = {table_base_id: 'nums_table_'};
 var srcGenState = {table_base_id: 'src_table_'};
 var alignerRunning = false;
 var startOver = false;
 function setLineNumberHeights() {
 if (alignerRunning) {
 startOver = true;
 return;
 }
 numsGenState.chunk_id = 0;
 numsGenState.table = document.getElementById('nums_table_0');
 numsGenState.row_num = 0;
 if (!numsGenState.table) {
 return; // Silently exit if no file is present.
 }
 srcGenState.chunk_id = 0;
 srcGenState.table = document.getElementById('src_table_0');
 srcGenState.row_num = 0;
 alignerRunning = true;
 continueToSetLineNumberHeights();
 }
 function rowGenerator(genState) {
 if (genState.row_num < genState.table.rows.length) {
 var currentRow = genState.table.rows[genState.row_num];
 genState.row_num++;
 return currentRow;
 }
 var newTable = document.getElementById(
 genState.table_base_id + (genState.chunk_id + 1));
 if (newTable) {
 genState.chunk_id++;
 genState.row_num = 0;
 genState.table = newTable;
 return genState.table.rows[0];
 }
 return null;
 }
 var MAX_ROWS_PER_PASS = 1000;
 function continueToSetLineNumberHeights() {
 var rowsInThisPass = 0;
 var numRow = 1;
 var srcRow = 1;
 while (numRow && srcRow && rowsInThisPass < MAX_ROWS_PER_PASS) {
 numRow = rowGenerator(numsGenState);
 srcRow = rowGenerator(srcGenState);
 rowsInThisPass++;
 if (numRow && srcRow) {
 if (numRow.offsetHeight != srcRow.offsetHeight) {
 numRow.firstChild.style.height = srcRow.offsetHeight + 'px';
 }
 }
 }
 if (rowsInThisPass >= MAX_ROWS_PER_PASS) {
 setTimeout(continueToSetLineNumberHeights, 10);
 } else {
 alignerRunning = false;
 if (startOver) {
 startOver = false;
 setTimeout(setLineNumberHeights, 500);
 }
 }
 }
 function initLineNumberHeights() {
 // Do 2 complete passes, because there can be races
 // between this code and prettify.
 startOver = true;
 setTimeout(setLineNumberHeights, 250);
 window.onresize = setLineNumberHeights;
 }
 initLineNumberHeights();
</script>

 
 
 <div id="log">
 <div style="text-align:right">
 <a class="ifCollapse" href="#" onclick="_toggleMeta(this); return false">Show details</a>
 <a class="ifExpand" href="#" onclick="_toggleMeta(this); return false">Hide details</a>
 </div>
 <div class="ifExpand">
 
 
 <div class="pmeta_bubble_bg" style="border:1px solid white">
 <div class="round4"></div>
 <div class="round2"></div>
 <div class="round1"></div>
 <div class="box-inner">
 <div id="changelog">
 <p>Change log</p>
 <div>
 <a href="/p/tavristasos/source/detail?spec=svn200&amp;r=162">r162</a>
 by tavristasos@gmail.com
 on Jan 30, 2012
 &nbsp; <a href="/p/tavristasos/source/diff?spec=svn200&r=162&amp;format=side&amp;path=/trunk/spinners.js&amp;old_path=/trunk/spinners.js&amp;old=">Diff</a>
 </div>
 <pre>1</pre>
 </div>
 
 
 
 
 
 
 <script type="text/javascript">
 var detail_url = '/p/tavristasos/source/detail?r=162&spec=svn200';
 var publish_url = '/p/tavristasos/source/detail?r=162&spec=svn200#publish';
 // describe the paths of this revision in javascript.
 var changed_paths = [];
 var changed_urls = [];
 
 changed_paths.push('/trunk/spinners.js');
 changed_urls.push('/p/tavristasos/source/browse/trunk/spinners.js?r\x3d162\x26spec\x3dsvn200');
 
 var selected_path = '/trunk/spinners.js';
 
 
 function getCurrentPageIndex() {
 for (var i = 0; i < changed_paths.length; i++) {
 if (selected_path == changed_paths[i]) {
 return i;
 }
 }
 }
 function getNextPage() {
 var i = getCurrentPageIndex();
 if (i < changed_paths.length - 1) {
 return changed_urls[i + 1];
 }
 return null;
 }
 function getPreviousPage() {
 var i = getCurrentPageIndex();
 if (i > 0) {
 return changed_urls[i - 1];
 }
 return null;
 }
 function gotoNextPage() {
 var page = getNextPage();
 if (!page) {
 page = detail_url;
 }
 window.location = page;
 }
 function gotoPreviousPage() {
 var page = getPreviousPage();
 if (!page) {
 page = detail_url;
 }
 window.location = page;
 }
 function gotoDetailPage() {
 window.location = detail_url;
 }
 function gotoPublishPage() {
 window.location = publish_url;
 }
</script>

 
 <style type="text/css">
 #review_nav {
 border-top: 3px solid white;
 padding-top: 6px;
 margin-top: 1em;
 }
 #review_nav td {
 vertical-align: middle;
 }
 #review_nav select {
 margin: .5em 0;
 }
 </style>
 <div id="review_nav">
 <table><tr><td>Go to:&nbsp;</td><td>
 <select name="files_in_rev" onchange="window.location=this.value">
 
 <option value="/p/tavristasos/source/browse/trunk/spinners.js?r=162&amp;spec=svn200"
 selected="selected"
 >/trunk/spinners.js</option>
 
 </select>
 </td></tr></table>
 
 
 



 
 </div>
 
 
 </div>
 <div class="round1"></div>
 <div class="round2"></div>
 <div class="round4"></div>
 </div>
 <div class="pmeta_bubble_bg" style="border:1px solid white">
 <div class="round4"></div>
 <div class="round2"></div>
 <div class="round1"></div>
 <div class="box-inner">
 <div id="older_bubble">
 <p>Older revisions</p>
 
 <a href="/p/tavristasos/source/list?path=/trunk/spinners.js&start=162">All revisions of this file</a>
 </div>
 </div>
 <div class="round1"></div>
 <div class="round2"></div>
 <div class="round4"></div>
 </div>
 
 <div class="pmeta_bubble_bg" style="border:1px solid white">
 <div class="round4"></div>
 <div class="round2"></div>
 <div class="round1"></div>
 <div class="box-inner">
 <div id="fileinfo_bubble">
 <p>File info</p>
 
 <div>Size: 8023 bytes,
 12 lines</div>
 
 <div><a href="//tavristasos.googlecode.com/svn/trunk/spinners.js">View raw file</a></div>
 </div>
 
 </div>
 <div class="round1"></div>
 <div class="round2"></div>
 <div class="round4"></div>
 </div>
 </div>
 </div>


</div>

</div>
</div>

<script src="https://ssl.gstatic.com/codesite/ph/1729405847801014513/js/prettify/prettify.js"></script>
<script type="text/javascript">prettyPrint();</script>


<script src="https://ssl.gstatic.com/codesite/ph/1729405847801014513/js/source_file_scripts.js"></script>

 <script type="text/javascript" src="https://ssl.gstatic.com/codesite/ph/1729405847801014513/js/kibbles.js"></script>
 <script type="text/javascript">
 var lastStop = null;
 var initialized = false;
 
 function updateCursor(next, prev) {
 if (prev && prev.element) {
 prev.element.className = 'cursor_stop cursor_hidden';
 }
 if (next && next.element) {
 next.element.className = 'cursor_stop cursor';
 lastStop = next.index;
 }
 }
 
 function pubRevealed(data) {
 updateCursorForCell(data.cellId, 'cursor_stop cursor_hidden');
 if (initialized) {
 reloadCursors();
 }
 }
 
 function draftRevealed(data) {
 updateCursorForCell(data.cellId, 'cursor_stop cursor_hidden');
 if (initialized) {
 reloadCursors();
 }
 }
 
 function draftDestroyed(data) {
 updateCursorForCell(data.cellId, 'nocursor');
 if (initialized) {
 reloadCursors();
 }
 }
 function reloadCursors() {
 kibbles.skipper.reset();
 loadCursors();
 if (lastStop != null) {
 kibbles.skipper.setCurrentStop(lastStop);
 }
 }
 // possibly the simplest way to insert any newly added comments
 // is to update the class of the corresponding cursor row,
 // then refresh the entire list of rows.
 function updateCursorForCell(cellId, className) {
 var cell = document.getElementById(cellId);
 // we have to go two rows back to find the cursor location
 var row = getPreviousElement(cell.parentNode);
 row.className = className;
 }
 // returns the previous element, ignores text nodes.
 function getPreviousElement(e) {
 var element = e.previousSibling;
 if (element.nodeType == 3) {
 element = element.previousSibling;
 }
 if (element && element.tagName) {
 return element;
 }
 }
 function loadCursors() {
 // register our elements with skipper
 var elements = CR_getElements('*', 'cursor_stop');
 var len = elements.length;
 for (var i = 0; i < len; i++) {
 var element = elements[i]; 
 element.className = 'cursor_stop cursor_hidden';
 kibbles.skipper.append(element);
 }
 }
 function toggleComments() {
 CR_toggleCommentDisplay();
 reloadCursors();
 }
 function keysOnLoadHandler() {
 // setup skipper
 kibbles.skipper.addStopListener(
 kibbles.skipper.LISTENER_TYPE.PRE, updateCursor);
 // Set the 'offset' option to return the middle of the client area
 // an option can be a static value, or a callback
 kibbles.skipper.setOption('padding_top', 50);
 // Set the 'offset' option to return the middle of the client area
 // an option can be a static value, or a callback
 kibbles.skipper.setOption('padding_bottom', 100);
 // Register our keys
 kibbles.skipper.addFwdKey("n");
 kibbles.skipper.addRevKey("p");
 kibbles.keys.addKeyPressListener(
 'u', function() { window.location = detail_url; });
 kibbles.keys.addKeyPressListener(
 'r', function() { window.location = detail_url + '#publish'; });
 
 kibbles.keys.addKeyPressListener('j', gotoNextPage);
 kibbles.keys.addKeyPressListener('k', gotoPreviousPage);
 
 
 }
 </script>
<script src="https://ssl.gstatic.com/codesite/ph/1729405847801014513/js/code_review_scripts.js"></script>
<script type="text/javascript">
 function showPublishInstructions() {
 var element = document.getElementById('review_instr');
 if (element) {
 element.className = 'opened';
 }
 }
 var codereviews;
 function revsOnLoadHandler() {
 // register our source container with the commenting code
 var paths = {'svn200': '/trunk/spinners.js'}
 codereviews = CR_controller.setup(
 {"loggedInUserEmail": "tavristasos@gmail.com", "token": "ABZ6GAcejLKk2txAc4VgfZDYU--bVFUaVw:1417533286226", "profileUrl": "/u/105438543774775363520/", "projectHomeUrl": "/p/tavristasos", "projectName": "tavristasos", "assetVersionPath": "https://ssl.gstatic.com/codesite/ph/1729405847801014513", "relativeBaseUrl": "", "assetHostPath": "https://ssl.gstatic.com/codesite/ph", "domainName": null}, '', 'svn200', paths,
 CR_BrowseIntegrationFactory);
 
 codereviews.registerActivityListener(CR_ActivityType.REVEAL_DRAFT_PLATE, showPublishInstructions);
 
 codereviews.registerActivityListener(CR_ActivityType.REVEAL_PUB_PLATE, pubRevealed);
 codereviews.registerActivityListener(CR_ActivityType.REVEAL_DRAFT_PLATE, draftRevealed);
 codereviews.registerActivityListener(CR_ActivityType.DISCARD_DRAFT_COMMENT, draftDestroyed);
 
 
 
 
 
 
 
 var initialized = true;
 reloadCursors();
 }
 window.onload = function() {keysOnLoadHandler(); revsOnLoadHandler();};

</script>
<script type="text/javascript" src="https://ssl.gstatic.com/codesite/ph/1729405847801014513/js/dit_scripts.js"></script>

 
 
 
 <script type="text/javascript" src="https://ssl.gstatic.com/codesite/ph/1729405847801014513/js/ph_core.js"></script>
 
 
 
 
</div> 

<div id="footer" dir="ltr">
 <div class="text">
 <a href="/projecthosting/terms.html">Terms</a> -
 <a href="http://www.google.com/privacy.html">Privacy</a> -
 <a href="/p/support/">Project Hosting Help</a>
 </div>
</div>
 <div class="hostedBy" style="margin-top: -20px;">
 <span style="vertical-align: top;">Powered by <a href="http://code.google.com/projecthosting/">Google Project Hosting</a></span>
 </div>

 
 


 
 </body>
</html>

